import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;//JUC包下的，属于java并发包，老JDK没有这个包

/*
实现线程的第三种方式
    实现Callable接口
    优点：可以获得返回值
    缺点：效率较低
 */
public class ThreadTest04 {
    public static void main(String[] args) throws ExecutionException, InterruptedException {

        //第一步：创建一个“未来任务类”的对象
        FutureTask task = new FutureTask(new Callable() {   //匿名内部类
            @Override
            public Object call() throws Exception {        //call方法相当于run方法，只不过这个有返回值
                System.out.println("call begin");
                Thread.sleep(1000*10);
                System.out.println("call end");
                int a = 100;
                int b = 200;
                return a + b ; //自动装箱
            }
        });

        //创建线程对象
        Thread t = new Thread(task);

        //启动线程
        t.start();

        //这里是main方法，主线程中
        //在主线程怎么获取t线程的返回结果？
        //get()方法的执行会导致“当前线程阻塞”
        Object obj = task.get();
        System.out.println("线程结果：" + obj);

        //main方法这里的程序要想执行必须等待get方法结束
        //get方法是去拿另一个线程的结果
        System.out.println("文梦甜");

    }
}
